// 这个文件是专门对axios工具进行二次封装的
import axios from 'axios'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 一、配置基础路径和超时限制
const service = axios.create({
  baseURL: '/api',  
  //配置基础路径
  // 发请求的路径包含 服务器地址 + 接口请求地址
  // 基础路径说的是各个请求公共的路径部分
  // 服务器地址 + 路径当中公共部分
  timeout: 20000,
});

// 请求拦截器和响应拦截器
// 一般我们在拦截器里面主要做两件事情
// 1、添加头信息
// 2、添加额外的功能
// 二、添加进度条信息nprogress

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 1、添加头信息
    // config.headers.token = xxxx
    // 2、添加额外的功能
    Nprogress.start()
    return config
  },
  // 请求拦截器一般失败的回调不用
  // () => {

  // }
);

// 响应拦截器
service.interceptors.response.use(
  (response) => {
    Nprogress.done()  //关闭进度条
    // 三、返回的响应不再需要从data属性当中拿数据，而是响应就是我们要的数据
    return response.data  //返回的响应以后就是我们要的数据
  },
  (error) => {
    Nprogress.done()
    // 四、统一处理请求错误, 具体请求也可以选择处理或不处理
    alert('发送ajax请求失败')
    //这个错误信息虽然已经被统一处理过，但是后续如果你拿到axios的返回信息还要继续处理这个错误
    // return Promise.reject(new Error(error.message))
    //如果处理过后，后续不再需要处理，需要中断promise链，返回pending状态的promise
    return new Promise(() => {})
  }
);

export default service

// {
//   default:service
// }
// import {default as service} from './xxx'
// import service from './xxx'





